

# import random
# n_card_type=int(input("请输入选择卡型（1-2）："))
# n_name=str(input("请输入您的名字："))
# n_password=int(input("请输入您的密码（6位）:"))
# n_adr=str(input("请输入您的地址："))
# user_id=random.randint(10000000, 99999999)
# user_info={
#    "user1":{ "user_id" :user_id,
#     "card_type":n_card_type,
#     "name":n_name,
#     "password":n_password,
#     "adr":n_adr,
#     "balance":0,
#     "bank_name":"中国农业银行昌平沙河支行" }
# }
# print(user_info)
# user_adr={
#
# }
# bank_base={
#
# }
# #
# # def c_account(**user):
# #      if user_id in bank_base.get(user_id):
# #          return 2
# #      elif user_id not in bank_base.get(user_id):
# #          bank_base.update(user_info)
# #      print(bank_base)
# # c_account(用户信息=user_info["user1"])
# import random
# def c_account(**user):
#     user_id=random.randint(10000000, 99999999)

import  random


def user():
    # 用户账号，系统随机产生8位数字
    account_number = random.randint(10000000, 99999999)
    print(f"用户账号为{account_number}")

    # 账户类型（1类、2类）
    print("请选择账户类型：")
    print("1. 一类账户")
    print("2. 二类账户")
    while True:  # 外层循环确保持续输入直到正确
        try:
            account_type = int(input("请输入选项编号（1-2）："))
            # 验证数字是否在有效范围内
            if account_type == 1:
                print("你的账户为一类账户[金卡]，最大转账额为5万，转出最大5万，转入没限制")
                break  # 输入正确，退出循环
            elif account_type == 2:
                print("你的账户为二类账户[普通卡]，最大转账额为2万，转出最大2万，转入没限制")
                break  # 输入正确，退出循环
            else:
                print("输入错误，请输入1或2")  # 数字不在有效范围
        except ValueError:
            print("输入有误，请输入数字1或2")  # 非数字输入的处理

    # 用户姓名
    username = input("请输入你的姓名：")

    # 密码
    while True:
        password = input("请设置6位数字密码：")
        if len(password) == 6 and password.isdigit():
            print("密码设置成功")
            break
        else:
            print("密码必须是6位密码，请重新输入")

    # 用户余额
    money = 0.0

    # 地址
    country = ""  # 国家
    province = ""  # 省份
    street = ""  # 街道
    house_number = ""  # 门牌号
    address = input(f"请输入地址(国家、省份、街道、门牌号）：{country}{province}{street}{house_number}")
    # 开户行（银行的名称）
    bank = "中国农业银行"
    # 将用户信息存储在字典中并返回
    user_info = {
        "account_number": account_number,
        "account_type": account_type,
        "username": username,
        "password": password,
        "address": address,
        "money": money,
        "bank": bank
    }

    return user_info
user_database = [
    {
        "account_number": 12345678,
        "account_type": 1,
        "username": "星星",
        "password": 123456,
        "address": "中国河南省郑州市",
        "money": 500.0,
        "bank": "中国农业银行"
    },
    {
        "account_number": 11111111,
        "account_type": 2,
        "username": "小李",
        "password": 123456,
        "address": "中国河南省郑州市",
        "money": 200.0,
        "bank": "中国农业银行"
    }
]  # 存储用户信息
max_users = 10  # 设定最大用户量

def check_account(account_number):
    # 遍历用户数据库中的每个用户及其索引
    for index, users in enumerate(user_database):
        if users["account_number"] == account_number:
            # 用户存在，返回索引位置
            return index
    return -1
def register_user(new_users):
    user_database.append(new_users)
    if len(user_database) >= max_users:
        print(f"已达最大容量{max_users}人")
        return 3
def open_account():
    new_user = user()
    account = new_user["account_number"]
    # 检查用户是否存在
    if check_account(account) != -1:
        print("账号已存在")
        return 2

    register = register_user(new_user)
    if register == 3:
        print("系统已达最大容量")
        return 3
    else:
        print(f"注册成功，你的账号是{account}")
        return 1


def deposit():
    user_account = int(input("请输入你的账号："))  # 用户账号
    index = check_account(user_account)  # 获取账号索引
    # 检查用户是否存在
    if index == -1:
        print("该账号不存在")
        return False

    user1 = user_database[index]  # 获取用户信息

    # 检查密码是否正确
    a = 0  # 密码输入次数
    while a < 5:
        user_password = int(input("请输入你的账号密码："))
        if user_password == user1["password"]:
            print("密码输入正确")
            break
        else:
            b = 4 - a
            print(f"密码输入错误，还剩{b}次机会，请重新输入：")
            a += 1
    else:
        print("密码连续输入错误5次，账号已锁定")
        return False

    deposit = int(input("请输入你要存的金额："))
    user1["money"] += deposit  # 修改数据库中的余额
    print(f"存钱成功，你的余额还有{user1['money']}元")
    return True
def transfer_money():
    user_account = int(input("请输入你的账号："))  # 转出的账号
    index = check_account(user_account)  # 获取账号索引
    user_account1 = int(input("请输入你想要转入的账号："))  # 转入的账号
    index1 = check_account(user_account1)  # 获取账号索引
    # 检查转出的账号是否存在
    if index == -1:
        print("该账号不存在")
        return False
    # 检查转入的账号是否存在
    if index1 == -1:
        print("该账号不存在")
        return False
    # 判断转出的账号是否等于转入的账号
    if user_account == user_account1:
        print("两个账号相同，无法转出")
        return False
    # 转出账号
    user1 = user_database[index]  # 获取转出账号信息
    # 检查转出账号的密码是否正确
    a = 0  # 密码输入次数
    while a < 5:
        user_password = int(input("请输入你的账号密码："))
        if user_password == user1["password"]:
            print("密码输入正确")
            break
        else:
            b = 4 - a
            print(f"密码输入错误，还剩{b}次机会，请重新输入：")
            a += 1
    else:
        print("密码连续输入错误5次，账号已锁定")
        return False

    # 转入账号
    user2 = user_database[index1]  # 获取转入账号信息

    # 检查转出账号的余额是否充足
    get = int(input("请输入你要转出的金额："))
    if get <= user1["money"]:
        user1["money"] -= get  # 修改数据库的金额
        print(f"转出成功，你的余额还有{user1['money']}元")
        user2["money"] += get
        print(f"转入账号的余额还有{user2['money']}元")
        return True
    else:
        print("你的余额不足，无法取出")
        return False

def account_functions():
    user_account = int(input("请输入你的账号："))  # 用户账号
    index = check_account(user_account)  # 获取账号索引
    # 检查用户是否存在
    if index == -1:
        print("该账号不存在")
        return False
    user1 = user_database[index]  # 获取用户信息
    # 检查密码是否正确
    a = 0  # 密码输入次数
    while a < 5:
        user_password = int(input("请输入你的账号密码："))
        if user_password == user1["password"]:
            print("密码输入正确")
            break
        else:
            b = 4 - a
            print(f"密码输入错误，还剩{b}次机会，请重新输入：")
            a += 1
    else:
        print("密码连续输入错误5次，账号已锁定")
        return False

    number = user1["account_number"]  # 用户账号
    category = user1["account_type"]  # 账户类型
    user_name = user1["username"]  # 用户姓名
    password1 = user1["password"]  # 用户账号密码
    user_address = user1["address"]  # 用户地址
    user_money = user1["money"]  # 账户余额
    Bank = user1["bank"]  # 银行
    print(
        f"当前账号：{number}，账户类型：{category}，用户姓名：{user_name}，账号密码：{password1}，地址：{user_address}，账户余额：{user_money}，银行：{Bank}")


print("***********************************")
print("*       中国农业银行账户管理系统       *")
print("***********************************")
print("*               选项               *")
print("*              1.开户              *")
print("*              2.存钱              *")
print("*              3.取钱              *")
print("*              4.转账              *")
print("*              5.查询              *")
print("*              6.Bye              *")
print("***********************************")
while True:  # 外层循环确保持续输入直到正确
    try:
        number = int(input("请输入选项编号（1-6）："))
        # 验证数字是否在有效范围内
        if number == 1:
            open_account()
        elif number == 2:
            deposit_money()
        elif number == 3:
            get_money()
        elif number == 4:
            transfer_money()
        elif number == 5:
            account_functions()
        else:
            print("Bey")
            break
    except ValueError:
        print("输入有误，请输入数字1或2")  # 非数字输入的处理
